package learn.basics.polymorphic.demo1;

class Fu {
    int num_ = 10;

    public void ShowNum() {
        System.out.println(num_);
    }

    public void Method() {
        System.out.println("父类的方法");
    }

    public void MethodFu() {
        System.out.println("父类特有的方法");
    }
}

class Zi extends Fu {
    int num_ = 20;
    int age_ = 16;

    @Override
    public void ShowNum() {
        System.out.println(num_);
    }

    @Override
    public void Method() {
        System.out.println("子类的方法");
    }

    public void MethodZi() {
        System.out.println("子类特有的方法");
    }
}

class Demo01Multi {
    public static void Test() {
        Fu obj = new Zi();

        obj.Method();
        obj.MethodFu();
    }
}

class Demo01MutiField {

    /*
访问成员变量的两种方式：

1. 直接通过对象名称访问成员变量：看等号左边是谁，优先用谁，没有则向上找。
2. 间接通过成员方法访问成员变量：看该方法属于谁，优先用谁，没有则向上找。
 */
    public static void Test() {
        Fu obj = new Zi();
        System.out.println(obj.num_);
        System.out.println("=================");

        // 子类没有覆盖重写,就是f父： 10；
        // 子类覆盖重写，就是子类： 20
        obj.ShowNum();

    }
}


public class TestPolymorphic {

    public static void main(String[] args) {

        // Demo01Multi.Test();
        Demo01MutiField.Test();
    }

}
